home *** CD-ROM | disk | FTP | other *** search
/ Aminet 43 / Aminet 43 (2001)(GTI - Schatztruhe)[!][Jun 2001].iso / Aminet / dev / moni / SystemViewer.lha / Source / SystemViewer.c < prev    next >
C/C++ Source or Header  |  2001-02-15  |  22KB  |  826 lines

  1. /****h *SysTemViewer/SystemViewer.c *************************************
  2. **
  3. ** NAME
  4. **    SystemViewer
  5. **
  6. ** DESCRIPTION
  7. **    The main GUI for various System Information Displayers & 
  8. **    Requesters.
  9. **
  10. **  GUI Designed by : Jim Steichen
  11. *************************************************************************
  12. */
  13.  
  14. #include <string.h>
  15.  
  16. #include <exec/types.h>
  17.  
  18. #include <AmigaDOSErrs.h>
  19.  
  20. #include <intuition/intuition.h>
  21. #include <intuition/classes.h>
  22. #include <intuition/classusr.h>
  23. #include <intuition/gadgetclass.h>
  24.  
  25. #include <workbench/workbench.h>
  26. #include <workbench/startup.h>
  27. #include <workbench/icon.h>
  28.  
  29. #include <dos/dostags.h> // for SYS_Asynch, etc.
  30.  
  31. #include <libraries/gadtools.h>
  32.  
  33. #include <graphics/displayinfo.h>
  34. #include <graphics/gfxbase.h>
  35.  
  36. #include <clib/exec_protos.h>
  37. #include <clib/intuition_protos.h>
  38. #include <clib/gadtools_protos.h>
  39. #include <clib/graphics_protos.h>
  40. #include <clib/utility_protos.h>
  41. #include <clib/diskfont_protos.h>
  42.  
  43. #include "CPGM:GlobalObjects/CommonFuncs.h"
  44.  
  45. #define AssignBt     0
  46. #define LockBt       1
  47. #define MountBt      2
  48. #define MemoryBt     3
  49. #define ScreenBt     4
  50. #define TaskBt       5
  51. #define VectorBt     6
  52. #define DeviceBt     7
  53. #define FontBt       8
  54. #define HardwareBt   9
  55. #define InterruptBt  10
  56. #define PortBt       11
  57. #define ResidentBt   12
  58. #define SemaphoreBt  13
  59.  
  60. #define Sys_CNT      14
  61.  
  62. PRIVATE char v[] = "$VER: SystemViewer 1.0 (18-Sep-2000) by J.T. Steichen";
  63.  
  64. // ----------------------------------------------------------------------
  65. IMPORT struct WBStartup *_WBenchMsg;
  66.  
  67. // ----------------------------------------------------------------------
  68.  
  69. struct IntuitionBase *IntuitionBase;
  70. struct GfxBase       *GfxBase;
  71. struct Library       *GadToolsBase;
  72. struct Library       *IconBase = NULL;
  73.  
  74. // ----------------------------------------------------------------------
  75.  
  76. PRIVATE struct Screen         *Scr      = NULL;
  77. PRIVATE struct Window         *SysWnd   = NULL;
  78. PRIVATE struct Gadget         *SysGList = NULL;
  79. PRIVATE struct IntuiMessage    SysMsg;
  80. PRIVATE struct Gadget         *SysGadgets[ Sys_CNT ];
  81.  
  82. PRIVATE UBYTE                 *PubScreenName = "Workbench";
  83. PRIVATE APTR                   VisualInfo    = NULL;
  84.  
  85. PRIVATE UWORD  SysLeft     = 189;
  86. PRIVATE UWORD  SysTop      = 16;
  87. PRIVATE UWORD  SysWidth    = 290;
  88. PRIVATE UWORD  SysHeight   = 170;
  89. PRIVATE UBYTE *SysWdt      = "System Viewer ©1999-2001:";
  90. PRIVATE UBYTE *SysScrTitle = "SystemViewer ©1999-2001 by J.T. Steichen";
  91.  
  92. PRIVATE struct TextFont *SysFont = NULL;
  93. PRIVATE struct CompFont  CFont   = { 0, };
  94. PRIVATE struct TextAttr  Attr    = { 0, };
  95. PRIVATE struct TextAttr *Font    = NULL;
  96.  
  97. PRIVATE UBYTE em[256], *ErrMsg = &em[0];
  98.  
  99. // TTTTTTTTT ToolTypes: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
  100.  
  101. PRIVATE char AssignCmd[]    = "ASSIGNCMD";
  102. PRIVATE char LockCmd[]      = "LOCKCMD";
  103. PRIVATE char MountCmd[]     = "MOUNTCMD";
  104. PRIVATE char MemoryCmd[]    = "MEMORYCMD";
  105. PRIVATE char ScreenCmd[]    = "SCREENCMD";
  106. PRIVATE char TaskCmd[]      = "TASKCMD";
  107. PRIVATE char VectorCmd[]    = "VECTORCMD";
  108. PRIVATE char DeviceCmd[]    = "DEVICECMD";
  109. PRIVATE char FontCmd[]      = "FONTCMD";
  110. PRIVATE char HardwareCmd[]  = "HARDWARECMD";
  111. PRIVATE char InterruptCmd[] = "INTERRUPTCMD";
  112. PRIVATE char PortCmd[]      = "PORTCMD";
  113. PRIVATE char ResidentCmd[]  = "RESIDENTCMD";
  114. PRIVATE char SemaphoreCmd[] = "SEMAPHORECMD";
  115.  
  116. PRIVATE char DefAssignCmd[32]    = "SysAssigns";
  117. PRIVATE char DefLockCmd[32]      = "SysLocks";
  118. PRIVATE char DefMountCmd[32]     = "SysMounts";
  119. PRIVATE char DefMemoryCmd[32]    = "SysMemory";
  120. PRIVATE char DefScreenCmd[32]    = "SysScreens";
  121. PRIVATE char DefTaskCmd[32]      = "SysTasks";
  122. PRIVATE char DefVectorCmd[32]    = "SysVectors";
  123. PRIVATE char DefDeviceCmd[32]    = "SysDevices";
  124. PRIVATE char DefFontCmd[32]      = "SysFonts";
  125. PRIVATE char DefHardwareCmd[32]  = "SysHardware";
  126. PRIVATE char DefInterruptCmd[32] = "SysInterrupts";
  127. PRIVATE char DefPortCmd[32]      = "SysPorts";
  128. PRIVATE char DefResidentCmd[32]  = "SysResidents";
  129. PRIVATE char DefSemaphoreCmd[32] = "SysSemaphores";
  130.  
  131. PRIVATE char *TTAssignCmd    = &DefAssignCmd[0];
  132. PRIVATE char *TTLockCmd      = &DefLockCmd[0];
  133. PRIVATE char *TTMountCmd     = &DefMountCmd[0];
  134. PRIVATE char *TTMemoryCmd    = &DefMemoryCmd[0];
  135. PRIVATE char *TTScreenCmd    = &DefScreenCmd[0];
  136. PRIVATE char *TTTaskCmd      = &DefTaskCmd[0];
  137. PRIVATE char *TTVectorCmd    = &DefVectorCmd[0];
  138. PRIVATE char *TTDeviceCmd    = &DefDeviceCmd[0];
  139. PRIVATE char *TTFontCmd      = &DefFontCmd[0];
  140. PRIVATE char *TTHardwareCmd  = &DefHardwareCmd[0];
  141. PRIVATE char *TTInterruptCmd = &DefInterruptCmd[0];
  142. PRIVATE char *TTPortCmd      = &DefPortCmd[0];
  143. PRIVATE char *TTResidentCmd  = &DefResidentCmd[0];
  144. PRIVATE char *TTSemaphoreCmd = &DefSemaphoreCmd[0];
  145.  
  146. // TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
  147.  
  148. PRIVATE struct DiskObject *diskobj = NULL;
  149.  
  150. PRIVATE struct IntuiText SysIText = {
  151.  
  152.    2, 0, JAM1,143, 12, NULL, 
  153.    (UBYTE *) "Pick what you want to check out:", NULL 
  154. };
  155.  
  156. PRIVATE UWORD SysGTypes[] = {
  157.  
  158.    BUTTON_KIND,   BUTTON_KIND,   BUTTON_KIND,
  159.    BUTTON_KIND,   BUTTON_KIND,   BUTTON_KIND,
  160.    BUTTON_KIND,   BUTTON_KIND,   BUTTON_KIND,
  161.    BUTTON_KIND,   BUTTON_KIND,   BUTTON_KIND,
  162.    BUTTON_KIND,   BUTTON_KIND
  163. };
  164.  
  165. PRIVATE int AssignBtClicked(    void );
  166. PRIVATE int LockBtClicked(      void );
  167. PRIVATE int MountBtClicked(     void );
  168. PRIVATE int MemoryBtClicked(    void );
  169. PRIVATE int ScreenBtClicked(    void );
  170. PRIVATE int TaskBtClicked(      void );
  171. PRIVATE int VectorBtClicked(    void );
  172. PRIVATE int DeviceBtClicked(    void );
  173. PRIVATE int FontBtClicked(      void );
  174. PRIVATE int HardwareBtClicked(  void );
  175. PRIVATE int InterruptBtClicked( void );
  176. PRIVATE int PortBtClicked(      void );
  177. PRIVATE int ResidentBtClicked(  void );
  178. PRIVATE int SemaphoreBtClicked( void );
  179.  
  180. PRIVATE struct NewGadget SysNGad[] = {
  181.  
  182.    146 , 44, 90, 17, (UBYTE *) "_Assignments", NULL, AssignBt,    
  183.    PLACETEXT_IN, NULL, (APTR) AssignBtClicked,
  184.    
  185.    146,  24, 90, 17, (UBYTE *) "_Locks",       NULL, LockBt,      
  186.    PLACETEXT_IN, NULL, (APTR) LockBtClicked,
  187.  
  188.    146,  64, 90, 17, (UBYTE *) "Mou_nts",      NULL, MountBt,
  189.    PLACETEXT_IN, NULL, (APTR) MountBtClicked,
  190.  
  191.     40,  64, 90, 17, (UBYTE *) "_Memory",      NULL, MemoryBt,    
  192.    PLACETEXT_IN, NULL, (APTR) MemoryBtClicked,
  193.  
  194.     40,  24, 90, 17, (UBYTE *) "_Screens",     NULL, ScreenBt,    
  195.    PLACETEXT_IN, NULL, (APTR) ScreenBtClicked,
  196.  
  197.     40,  44, 90, 17, (UBYTE *) "_Tasks",       NULL, TaskBt,      
  198.    PLACETEXT_IN, NULL, (APTR) TaskBtClicked,
  199.  
  200.    146, 144, 90, 17, (UBYTE *) "_Vectors",     NULL, VectorBt,    
  201.    PLACETEXT_IN, NULL, (APTR) VectorBtClicked,
  202.  
  203.     40,  84, 90, 17, (UBYTE *) "_Devices",     NULL, DeviceBt,    
  204.    PLACETEXT_IN, NULL, (APTR) DeviceBtClicked,
  205.  
  206.     40, 104, 90, 17, (UBYTE *) "_Fonts",       NULL, FontBt,      
  207.    PLACETEXT_IN, NULL, (APTR) FontBtClicked,
  208.  
  209.    146, 104, 90, 17, (UBYTE *) "_Hardware",    NULL, HardwareBt,  
  210.    PLACETEXT_IN, NULL, (APTR) HardwareBtClicked,
  211.    
  212.    146, 124, 90, 17, (UBYTE *) "_Interrupts",  NULL, InterruptBt, 
  213.    PLACETEXT_IN, NULL, (APTR) InterruptBtClicked,
  214.  
  215.     40, 124, 90, 17, (UBYTE *) "_Ports",       NULL, PortBt,     
  216.    PLACETEXT_IN, NULL, (APTR) PortBtClicked,
  217.  
  218.    146,  84, 90, 17, (UBYTE *) "_Residents",   NULL, ResidentBt,  
  219.    PLACETEXT_IN, NULL, (APTR) ResidentBtClicked,
  220.  
  221.     40, 144, 90, 17, (UBYTE *) "S_emaphores",  NULL, SemaphoreBt, 
  222.    PLACETEXT_IN, NULL, (APTR) SemaphoreBtClicked
  223. };
  224.  
  225. PRIVATE ULONG SysGTags[] = {
  226.  
  227.    GT_Underscore, '_', TAG_DONE,   GT_Underscore, '_', TAG_DONE,
  228.    GT_Underscore, '_', TAG_DONE,   GT_Underscore, '_', TAG_DONE,
  229.    GT_Underscore, '_', TAG_DONE,   GT_Underscore, '_', TAG_DONE,
  230.    GT_Underscore, '_', TAG_DONE,   GT_Underscore, '_', TAG_DONE,
  231.    GT_Underscore, '_', TAG_DONE,   GT_Underscore, '_', TAG_DONE,
  232.    GT_Underscore, '_', TAG_DONE,   GT_Underscore, '_', TAG_DONE,
  233.    GT_Underscore, '_', TAG_DONE,   GT_Underscore, '_', TAG_DONE
  234. };
  235.  
  236. // ----------------------------------------------------------------------- 
  237.  
  238. PRIVATE int SetupScreen( void )
  239. {
  240.    Font = &Attr;
  241.  
  242.    if ((Scr = LockPubScreen( PubScreenName )) == NULL)
  243.       return( -1 );
  244.  
  245.    ComputeFont( Scr, Font, &CFont, 0, 0 );
  246.  
  247.    if ((VisualInfo = GetVisualInfo( Scr, TAG_DONE )) == NULL)
  248.       return( -2 );
  249.  
  250.    return( 0 );
  251. }
  252.  
  253. PRIVATE void CloseDownScreen( void )
  254. {
  255.    if (VisualInfo != NULL) 
  256.       {
  257.       FreeVisualInfo( VisualInfo );
  258.       VisualInfo = NULL;
  259.       }
  260.  
  261.    if (Scr != NULL) 
  262.       {
  263.       UnlockPubScreen( NULL, Scr );
  264.       Scr = NULL;
  265.       }
  266.  
  267.    return;
  268. }
  269.  
  270. PRIVATE char cmd[256], *command = &cmd[0];
  271.  
  272. PRIVATE struct TagItem RunTags[] = { SYS_Asynch, TRUE, TAG_DONE }; 
  273.  
  274. PRIVATE void RunCommand( char *command )
  275. {
  276.    if (System( command, TAG_DONE ) < 0)
  277.       {
  278.       sprintf( ErrMsg,
  279.                "\t%s\ncouldn't be run by the System,\ncheck your spelling!",
  280.                command
  281.              );
  282.  
  283.       (void) Handle_Problem( ErrMsg, "Invalid ToolType?", NULL );
  284.       }
  285.  
  286.    return;
  287. }
  288.  
  289. PRIVATE int AssignBtClicked( void )
  290. {
  291.    strcpy( command, TTAssignCmd );
  292.    RunCommand( command );
  293.    return( (int) TRUE );
  294. }
  295.  
  296. PRIVATE int LockBtClicked( void )
  297. {
  298.    strcpy( command, TTLockCmd );
  299.    RunCommand( command );
  300.    return( (int) TRUE );
  301. }
  302.  
  303. PRIVATE int MountBtClicked( void )
  304. {
  305.    strcpy( command, TTMountCmd );
  306.    RunCommand( command );
  307.    return( (int) TRUE );
  308. }
  309.  
  310. PRIVATE int MemoryBtClicked( void )
  311. {
  312.    strcpy( command, TTMemoryCmd );
  313.    RunCommand( command );
  314.    return( (int) TRUE );
  315. }
  316.  
  317. PRIVATE int ScreenBtClicked( void )
  318. {
  319.    strcpy( command, TTScreenCmd );
  320.    RunCommand( command );
  321.    return( (int) TRUE );
  322. }
  323.  
  324. PRIVATE int TaskBtClicked( void )
  325. {
  326.    strcpy( command, TTTaskCmd );
  327.    RunCommand( command );
  328.    return( (int) TRUE );
  329. }
  330.  
  331. PRIVATE int VectorBtClicked( void )
  332. {
  333.    strcpy( command, TTVectorCmd );
  334.    RunCommand( command );
  335.    return( (int) TRUE );
  336. }
  337.  
  338. PRIVATE int DeviceBtClicked( void )
  339. {
  340.    strcpy( command, TTDeviceCmd );
  341.    RunCommand( command );
  342.    return( (int) TRUE );
  343. }
  344.  
  345. PRIVATE int FontBtClicked( void )
  346. {
  347.    strcpy( command, TTFontCmd );
  348.    RunCommand( command );
  349.    return( (int) TRUE );
  350. }
  351.  
  352. PRIVATE int HardwareBtClicked( void )
  353. {
  354.    strcpy( command, TTHardwareCmd );
  355.    RunCommand( command );
  356.    return( (int) TRUE );
  357. }
  358.  
  359. PRIVATE int InterruptBtClicked( void )
  360. {
  361.    strcpy( command, TTInterruptCmd );
  362.    RunCommand( command );
  363.    return( (int) TRUE );
  364. }
  365.  
  366. PRIVATE int PortBtClicked( void )
  367. {
  368.    strcpy( command, TTPortCmd );
  369.    RunCommand( command );
  370.    return( (int) TRUE );
  371. }
  372.  
  373. PRIVATE int ResidentBtClicked( void )
  374. {
  375.    strcpy( command, TTResidentCmd );
  376.    RunCommand( command );
  377.    return( (int) TRUE );
  378. }
  379.  
  380. PRIVATE int SemaphoreBtClicked( void )
  381. {
  382.    strcpy( command, TTSemaphoreCmd );
  383.    RunCommand( command );
  384.    return( (int) TRUE );
  385. }
  386.  
  387. PRIVATE void CloseSysWindow( void )
  388. {
  389.    if (SysWnd != NULL) 
  390.       {
  391.       CloseWindow( SysWnd );
  392.       SysWnd = NULL;
  393.       }
  394.  
  395.    if (SysGList != NULL) 
  396.       {
  397.       FreeGadgets( SysGList );
  398.       SysGList = NULL;
  399.       }
  400.  
  401.    if (SysFont != NULL) 
  402.       {
  403.       CloseFont( SysFont );
  404.       SysFont = NULL;
  405.       }
  406.  
  407.    return;
  408. }
  409.  
  410. PRIVATE int SysCloseWindow( void )
  411. {
  412.    CloseSysWindow();
  413.    return( (int) FALSE );
  414. }
  415.  
  416. PRIVATE int SysVanillaKey( int whichkey )
  417. {
  418.    int rval = TRUE;
  419.    
  420.    switch (whichkey)
  421.       {
  422.       case 'A':
  423.       case 'a':
  424.          rval = AssignBtClicked();      break;
  425.  
  426.       case 'L':
  427.       case 'l':
  428.          rval = LockBtClicked();        break;
  429.  
  430.       case 'n':
  431.       case 'N':
  432.          rval = MountBtClicked();       break;
  433.  
  434.       case 'M':
  435.       case 'm':
  436.          rval = MemoryBtClicked();      break;
  437.          
  438.       case 'S':
  439.       case 's':
  440.          rval = ScreenBtClicked();      break;
  441.  
  442.       case 'T':
  443.       case 't':
  444.          rval = TaskBtClicked();        break;
  445.  
  446.       case 'V':
  447.       case 'v':
  448.          rval = VectorBtClicked();      break;
  449.  
  450.       case 'D':
  451.       case 'd':
  452.          rval = DeviceBtClicked();      break;
  453.  
  454.       case 'F':
  455.       case 'f':
  456.          rval = FontBtClicked();        break;
  457.    
  458.       case 'H':
  459.       case 'h':
  460.          rval = HardwareBtClicked();    break;
  461.       
  462.       case 'I':
  463.       case 'i':
  464.          rval = InterruptBtClicked();   break;
  465.  
  466.       case 'P':
  467.       case 'p':
  468.          rval = PortBtClicked();        break;
  469.  
  470.       case 'R':
  471.       case 'r':
  472.          rval = ResidentBtClicked();    break;
  473.       
  474.       case 'e':
  475.       case 'E':
  476.          rval = SemaphoreBtClicked();   break;
  477.  
  478.       case 'q':  // Exit program keys:
  479.       case 'Q':
  480.       case 'x':
  481.       case 'X':
  482.          rval = FALSE;
  483.          break;
  484.       }
  485.  
  486.    return( (int) rval );
  487. }
  488.  
  489. PRIVATE void SysRender( void )
  490. {
  491.    struct IntuiText it;
  492.  
  493.    ComputeFont( Scr, Font, &CFont, SysWidth, SysHeight );
  494.  
  495.    CopyMem( (char *) &SysIText, (char *) &it, 
  496.             (long) sizeof( struct IntuiText )
  497.           );
  498.  
  499.    it.ITextFont = Font;
  500.  
  501.    it.LeftEdge  = CFont.OffX + ComputeX( CFont.FontX, it.LeftEdge ) 
  502.                   - (IntuiTextLength( &it ) >> 1);
  503.    
  504.    it.TopEdge   = CFont.OffY + ComputeY( CFont.FontY, it.TopEdge ) 
  505.                   - (Font->ta_YSize >> 1);
  506.  
  507.    PrintIText( SysWnd->RPort, &it, 0, 0 );
  508.  
  509.    return;
  510. }
  511.  
  512. PRIVATE int OpenSysWindow( void )
  513. {
  514.    struct NewGadget  ng;
  515.    struct Gadget    *g;
  516.    UWORD             lc, tc;
  517.    UWORD             wleft = SysLeft, wtop = SysTop, ww, wh;
  518.  
  519.    ComputeFont( Scr, Font, &CFont, SysWidth, SysHeight );
  520.  
  521.    ww = ComputeX( CFont.FontX, SysWidth );
  522.    wh = ComputeY( CFont.FontY, SysHeight );
  523.  
  524.    if ((wleft + ww + CFont.OffX + Scr->WBorRight) > Scr->Width) 
  525.       wleft = Scr->Width - ww;
  526.    
  527.    if ((wtop + wh + CFont.OffY + Scr->WBorBottom) > Scr->Height) 
  528.       wtop = Scr->Height - wh;
  529.  
  530.    if ((SysFont = OpenDiskFont( Font )) == NULL)
  531.       return( -5 );
  532.  
  533.    if ((g = CreateContext( &SysGList )) == NULL)
  534.       return( -1 );
  535.  
  536.    for (lc = 0, tc = 0; lc < Sys_CNT; lc++) 
  537.       {
  538.       CopyMem( (char *) &SysNGad[ lc ], (char *) &ng, 
  539.                (long) sizeof( struct NewGadget )
  540.              );
  541.  
  542.       ng.ng_VisualInfo = VisualInfo;
  543.       ng.ng_TextAttr   = Font;
  544.  
  545.       ng.ng_LeftEdge   = CFont.OffX + ComputeX( CFont.FontX, 
  546.                                                 ng.ng_LeftEdge
  547.                                               );
  548.  
  549.       ng.ng_TopEdge    = CFont.OffY + ComputeY( CFont.FontY, 
  550.                                                 ng.ng_TopEdge
  551.                                               );
  552.  
  553.       ng.ng_Width      = ComputeX( CFont.FontX, ng.ng_Width );
  554.       ng.ng_Height     = ComputeY( CFont.FontY, ng.ng_Height);
  555.  
  556.       SysGadgets[ lc ] = g = CreateGadgetA( (ULONG) SysGTypes[ lc ], 
  557.                                g, 
  558.                                &ng, 
  559.                                (struct TagItem *) &SysGTags[ tc ] );
  560.  
  561.       while (SysGTags[ tc ] != NULL) 
  562.          tc += 2;
  563.       
  564.       tc++;
  565.  
  566.       if (g == NULL)
  567.          return( -2 );
  568.       }
  569.  
  570.    if ((SysWnd = OpenWindowTags( NULL,
  571.              WA_Left,        wleft,
  572.              WA_Top,         wtop,
  573.              WA_Width,       ww + CFont.OffX + Scr->WBorRight,
  574.              WA_Height,      wh + CFont.OffY + Scr->WBorBottom,
  575.              
  576.              WA_IDCMP,       BUTTONIDCMP | IDCMP_CLOSEWINDOW 
  577.                | IDCMP_VANILLAKEY | IDCMP_REFRESHWINDOW,
  578.              
  579.              WA_Flags,       WFLG_DRAGBAR | WFLG_DEPTHGADGET 
  580.                | WFLG_CLOSEGADGET | WFLG_SMART_REFRESH | WFLG_ACTIVATE 
  581.                | WFLG_RMBTRAP,
  582.  
  583.              WA_Gadgets,     SysGList,
  584.              WA_Title,       SysWdt,
  585.              WA_ScreenTitle, SysScrTitle,
  586.              TAG_DONE )
  587.       ) == NULL)
  588.       return( -4 );
  589.  
  590.    GT_RefreshWindow( SysWnd, NULL );
  591.  
  592.    SysRender();
  593.  
  594.    return( 0 );
  595. }
  596.  
  597. PRIVATE int HandleSysIDCMP( void )
  598. {
  599.    struct IntuiMessage *m;
  600.    int                (*func)( void );
  601.    BOOL                 running = TRUE;
  602.  
  603.    while (running == TRUE)
  604.       {
  605.       if ((m = GT_GetIMsg( SysWnd->UserPort )) == NULL) 
  606.          {
  607.          (void) Wait( 1L << SysWnd->UserPort->mp_SigBit );
  608.          continue;
  609.          }
  610.  
  611.       CopyMem( (char *) m, (char *) &SysMsg, 
  612.                (long) sizeof( struct IntuiMessage )
  613.              );
  614.  
  615.       GT_ReplyIMsg( m );
  616.  
  617.       switch (SysMsg.Class) 
  618.          {
  619.          case   IDCMP_REFRESHWINDOW:
  620.             GT_BeginRefresh( SysWnd );
  621.             SysRender();
  622.             GT_EndRefresh( SysWnd, TRUE );
  623.             break;
  624.  
  625.          case   IDCMP_CLOSEWINDOW:
  626.             running = SysCloseWindow();
  627.             break;
  628.  
  629.          case   IDCMP_VANILLAKEY:
  630.             running = SysVanillaKey( SysMsg.Code );
  631.             break;
  632.  
  633.          case   IDCMP_GADGETUP:
  634.             func = (void *) ((struct Gadget *)SysMsg.IAddress)->UserData;
  635.             if (func != NULL)
  636.                running = func();
  637.             break;
  638.          }
  639.       }
  640.  
  641.    return( running );
  642. }
  643.  
  644. PRIVATE void ShutdownProgram( void )
  645. {
  646.    CloseSysWindow();
  647.    CloseDownScreen();
  648.  
  649.    if (IconBase != NULL)
  650.       CloseLibrary( IconBase );
  651.  
  652.    CloseLibs();
  653.  
  654.    return;
  655. }
  656.  
  657. // ------------------------------------------------------------------
  658.  
  659. PRIVATE int SetupProgram( void )
  660. {
  661.    if (OpenLibs() < 0)
  662.       return( -1 );
  663.       
  664.    if ((IconBase = OpenLibrary( "icon.library", 37L )) == NULL)
  665.       {
  666.       CloseLibs();
  667.       return( -3 );
  668.       }
  669.  
  670.    if (SetupScreen() < 0)
  671.       {
  672.       CloseLibs();
  673.       CloseLibrary( IconBase );
  674.       return( -5 );
  675.       }   
  676.  
  677.    if (OpenSysWindow() < 0)
  678.       {
  679.       ShutdownProgram();
  680.       return( -6 );
  681.       }   
  682.  
  683.    return( 0 );   
  684. }
  685.  
  686. PRIVATE void SetValidGadgets( void )
  687. {
  688.    if (strcmp( TTAssignCmd, "NOT_DONE" ) == 0)
  689.       GT_SetGadgetAttrs( SysGadgets[ AssignBt ], SysWnd, NULL,
  690.                          GA_Disabled, TRUE, TAG_DONE    
  691.                        );
  692.  
  693.    if (strcmp( TTLockCmd, "NOT_DONE" ) == 0)
  694.       GT_SetGadgetAttrs( SysGadgets[ LockBt ], SysWnd, NULL,
  695.                          GA_Disabled, TRUE, TAG_DONE    
  696.                        );
  697.  
  698.    if (strcmp( TTMountCmd, "NOT_DONE" ) == 0)
  699.       GT_SetGadgetAttrs( SysGadgets[ MountBt ], SysWnd, NULL,
  700.                          GA_Disabled, TRUE, TAG_DONE    
  701.                        );
  702.  
  703.    if (strcmp( TTMemoryCmd, "NOT_DONE" ) == 0)
  704.       GT_SetGadgetAttrs( SysGadgets[ MemoryBt ], SysWnd, NULL,
  705.                          GA_Disabled, TRUE, TAG_DONE    
  706.                        );
  707.  
  708.    if (strcmp( TTScreenCmd, "NOT_DONE" ) == 0)
  709.       GT_SetGadgetAttrs( SysGadgets[ ScreenBt ], SysWnd, NULL,
  710.                          GA_Disabled, TRUE, TAG_DONE    
  711.                        );
  712.  
  713.    if (strcmp( TTTaskCmd, "NOT_DONE" ) == 0)
  714.       GT_SetGadgetAttrs( SysGadgets[ TaskBt ], SysWnd, NULL,
  715.                          GA_Disabled, TRUE, TAG_DONE    
  716.                        );
  717.  
  718.    if (strcmp( TTVectorCmd, "NOT_DONE" ) == 0)
  719.       GT_SetGadgetAttrs( SysGadgets[ VectorBt ], SysWnd, NULL,
  720.                          GA_Disabled, TRUE, TAG_DONE    
  721.                        );
  722.  
  723.    if (strcmp( TTDeviceCmd, "NOT_DONE" ) == 0)
  724.       GT_SetGadgetAttrs( SysGadgets[ DeviceBt ], SysWnd, NULL,
  725.                          GA_Disabled, TRUE, TAG_DONE    
  726.                        );
  727.  
  728.    if (strcmp( TTFontCmd, "NOT_DONE" ) == 0)
  729.       GT_SetGadgetAttrs( SysGadgets[ FontBt ], SysWnd, NULL,
  730.                          GA_Disabled, TRUE, TAG_DONE    
  731.                        );
  732.  
  733.    if (strcmp( TTHardwareCmd, "NOT_DONE" ) == 0)
  734.       GT_SetGadgetAttrs( SysGadgets[ HardwareBt ], SysWnd, NULL,
  735.                          GA_Disabled, TRUE, TAG_DONE    
  736.                        );
  737.  
  738.    if (strcmp( TTInterruptCmd, "NOT_DONE" ) == 0)
  739.       GT_SetGadgetAttrs( SysGadgets[ InterruptBt ], SysWnd, NULL,
  740.                          GA_Disabled, TRUE, TAG_DONE    
  741.                        );
  742.  
  743.    if (strcmp( TTPortCmd, "NOT_DONE" ) == 0)
  744.       GT_SetGadgetAttrs( SysGadgets[ PortBt ], SysWnd, NULL,
  745.                          GA_Disabled, TRUE, TAG_DONE    
  746.                        );
  747.  
  748.    if (strcmp( TTResidentCmd, "NOT_DONE" ) == 0)
  749.       GT_SetGadgetAttrs( SysGadgets[ ResidentBt ], SysWnd, NULL,
  750.                          GA_Disabled, TRUE, TAG_DONE    
  751.                        );
  752.  
  753.    if (strcmp( TTSemaphoreCmd, "NOT_DONE" ) == 0)
  754.       GT_SetGadgetAttrs( SysGadgets[ SemaphoreBt ], SysWnd, NULL,
  755.                          GA_Disabled, TRUE, TAG_DONE    
  756.                        );
  757.  
  758.    return;
  759. }
  760.  
  761. PRIVATE void *processToolTypes( char **toolptr )
  762. {
  763.    if (toolptr == NULL)
  764.       return( NULL );
  765.  
  766.    TTAssignCmd    = GetToolStr( toolptr, AssignCmd,    DefAssignCmd    );
  767.    TTLockCmd      = GetToolStr( toolptr, LockCmd,      DefLockCmd      );
  768.    TTMountCmd     = GetToolStr( toolptr, MountCmd,     DefMountCmd     );
  769.    TTMemoryCmd    = GetToolStr( toolptr, MemoryCmd,    DefMemoryCmd    );
  770.    TTScreenCmd    = GetToolStr( toolptr, ScreenCmd,    DefScreenCmd    );
  771.    TTTaskCmd      = GetToolStr( toolptr, TaskCmd,      DefTaskCmd      );
  772.    TTVectorCmd    = GetToolStr( toolptr, VectorCmd,    DefVectorCmd    );
  773.    TTDeviceCmd    = GetToolStr( toolptr, DeviceCmd,    DefDeviceCmd    );
  774.    TTFontCmd      = GetToolStr( toolptr, FontCmd,      DefFontCmd      );
  775.    TTHardwareCmd  = GetToolStr( toolptr, HardwareCmd,  DefHardwareCmd  );
  776.    TTInterruptCmd = GetToolStr( toolptr, InterruptCmd, DefInterruptCmd );
  777.    TTPortCmd      = GetToolStr( toolptr, PortCmd,      DefPortCmd      );
  778.    TTResidentCmd  = GetToolStr( toolptr, ResidentCmd,  DefResidentCmd  );
  779.    TTSemaphoreCmd = GetToolStr( toolptr, SemaphoreCmd, DefSemaphoreCmd );
  780.  
  781.    return( NULL );
  782. }
  783.  
  784. PUBLIC int main( int argc, char **argv )
  785. {
  786.    struct WBArg  *wbarg;
  787.    char         **toolptr = NULL;
  788.  
  789.    if (SetupProgram() < 0)
  790.       {
  791.       fprintf( stderr, "Couldn't set up %s!\n", argv[0] );
  792.       return( RETURN_FAIL );
  793.       }
  794.  
  795.    if (argc > 0)    /* from CLI:       */
  796.       {
  797.       // We prefer to use the ToolTypes: 
  798.       (void) FindIcon( &processToolTypes, diskobj, argv[0] );
  799.       }
  800.    else             /* from Workbench: */
  801.       {
  802.       IMPORT char *_WBArgv;
  803.       
  804.       // argc = _WBArgc;
  805.       argv = _WBArgv;
  806.       
  807.       wbarg   = &(_WBenchMsg->sm_ArgList[ _WBenchMsg->sm_NumArgs - 1 ]);
  808.       toolptr = FindTools( diskobj, wbarg->wa_Name, wbarg->wa_Lock );
  809.  
  810.       (void) processToolTypes( toolptr );
  811.       }
  812.  
  813.    SetValidGadgets();
  814.    SetNotifyWindow( SysWnd );
  815.  
  816.    (void) HandleSysIDCMP();
  817.  
  818.    FreeDiskObject( diskobj );   
  819.  
  820.    ShutdownProgram();
  821.  
  822.    return( RETURN_OK );
  823. }
  824.  
  825. /* ------------------- END of SystemViewer.c file! -------------------- */
  826.